const mongoose = require('mongoose')

mongoose.connect('mongodb://127.0.0.1:27017/bilibili').then(() => {
  console.log('准备使用')

  const schema = new mongoose.Schema({
    name: {
      type: String,
      required: true,
      unique: true,
    },
    author: {
      type: String,
      default: '佚名',
    },
    price: Number,
    status: {
      type: String,
      enum: ['上架', '下架'],
    },
    is_hot: Boolean,
    tags: Array,
    create_time: Date,
    notes: mongoose.Schema.Types.Mixed,
  })

  const model = mongoose.model('books', schema)

  // model.findOne({ name: '百年孤独' }).then(data => {
  //   console.log('查询成功', data)
  // }).catch(error => {
  //   console.log('查询失败', error)
  // }).finally(() => {
  //   mongoose.disconnect()
  // })

  // model.findById('6823fdfc9c2afec38e2d57cc').then(data => {
  //   console.log('查询成功', data)
  // }).catch(error => {
  //   console.log('查询失败', error)
  // })

  // model.find({ author: '余华' }).then(data => {
  //   console.log('查询成功', data)
  // }).catch(error => {
  //   console.log('查询失败', error)
  // })

  // model.find({ price: { $gt: 50 } }).then(data => {
  //   console.log('查询成功', data)
  // }).catch(error => {
  //   console.log('查询失败', error)
  // })

  // model.find({ $or: [{ author: '张嘉佳' }, { author: '刘慈欣' }] }).then(data => {
  //   console.log('查询成功', data)
  // }).catch(error => {
  //   console.log('查询失败', error)
  // })

  // model.find({ $and: [{ price: { $gt: 50 } }, { price: { $lte: 111 } }] }).then(data => {
  //   console.log('查询成功', data)
  // }).catch(error => {
  //   console.log('查询失败', error)
  // })

  // model.find({ name: /三/ }).then(data => {
  //   console.log('查询成功', data)
  // }).catch(error => {
  //   console.log('查询失败', error)
  // })

  // model.find({ name: new RegExp('有') }).then(data => {
  //   console.log('查询成功', data)
  // }).catch(error => {
  //   console.log('查询失败', error)
  // })

  model.find()
  .select({ _id: 0, name: 1, price: 1 })
  .select({ author: 1 })
  .sort({ price: 1 })
  .skip(5)
  .limit(3)
  .then(data => {
    console.log('查询成功', data)
  }).catch(error => {
    console.log('查询失败', error)
  })

}).catch(error => {
  console.log('初始连接错误', error)
})

mongoose.connection.on('error', error => {
  console.log('初始连接后错误', error)
})

mongoose.connection.on('disconnected', () => {
  console.log('失去连接')
})